﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraTabbedMdi;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Ribbon;
using Model;

namespace TanHungLong
{
    public partial class FrmMain : DevExpress.XtraEditors.XtraForm
    {
        public RmsControl.TranspControl transpControl = new RmsControl.TranspControl();
        private bool isLogin = false;

        public FrmMain()
        {
            InitializeComponent();
            this.KeyPreview = true;

            this.Text = "FRUITGARDEN " + Utility.strPhienBan;
            Model.Session.DBConnectionString = "Data Source=(local)\\SQLEXPRESS;Initial Catalog=THL;Persist Security Info=True;User ID=sa;Password=1;";
            Model.Session.TenDonVi = "SHOP HOA QUẢ NHẬP KHẨU FRUITGARDEN";
            CheckData();

            this.Shown += new EventHandler(FrmMain_Shown);
            this.FormClosing += new FormClosingEventHandler(FrmMain_FormClosing);

            this.Controls.Add(this.transpControl);
            this.transpControl.BackColor = Color.Transparent;
            this.transpControl.BackImage = null;
            this.transpControl.FillColor = Color.SteelBlue;//
            this.transpControl.GlassColor = Color.Transparent;
            this.transpControl.GlassMode = true;
            this.transpControl.LineWidth = 2;
            this.transpControl.Location = new Point(0, 0);
            this.transpControl.Name = "transpControl1";
            this.transpControl.Opacity = 50;
            this.transpControl.Size = new Size(5, 5);
            this.transpControl.TranspKey = Color.LightSlateGray;
            this.transpControl.Visible = false;
            this.transpControl.SendToBack();


            this.barButtonItemPhongBan.ItemClick += new ItemClickEventHandler(barButtonItemPhongBan_ItemClick);
            this.barButtonItemDanhMuc.ItemClick += new ItemClickEventHandler(barButtonItemDanhMuc_ItemClick);
            this.barButtonItemChucVu.ItemClick += new ItemClickEventHandler(barButtonItemChucVu_ItemClick);
            this.barButtonItemHoSoNhanVien.ItemClick += new ItemClickEventHandler(barButtonItemHoSoNhanVien_ItemClick);
            this.barButtonItemNgachBacLuong.ItemClick += new ItemClickEventHandler(barButtonItemNgachBacLuong_ItemClick);
            this.barButtonItemPhuCap.ItemClick += new ItemClickEventHandler(barButtonItemPhuCap_ItemClick);
            this.barButtonItemKhoanTru.ItemClick += new ItemClickEventHandler(barButtonItemKhoanTru_ItemClick);
            this.barButtonItemTamUngLuong.ItemClick += new ItemClickEventHandler(barButtonItemTamUngLuong_ItemClick);
            this.barButtonItemThietDatHeThong.ItemClick += new ItemClickEventHandler(barButtonItemThietDatHeThong_ItemClick);
            this.barButtonItemBangLuong.ItemClick += new ItemClickEventHandler(barButtonItemBangLuong_ItemClick);

            //(LoaiPhieu == 1 ? "Thu" : "Chi");
            this.barButtonItemThu.ItemClick += new ItemClickEventHandler(barButtonItemThu_ItemClick);
            this.barButtonItemChi.ItemClick += new ItemClickEventHandler(barButtonItemChi_ItemClick);

            this.barButtonItemThu_ThuQuy.ItemClick += new ItemClickEventHandler(barButtonItemThu_ThuQuy_ItemClick);
            this.barButtonItemChi_ThuQuy.ItemClick += new ItemClickEventHandler(barButtonItemChi_ThuQuy_ItemClick);

            //
            this.barButtonItemKhachHang.ItemClick += new ItemClickEventHandler(barButtonItemKhachHang_ItemClick);
            this.barButtonItemNhomMatHang.ItemClick += new ItemClickEventHandler(barButtonItemNhomMatHang_ItemClick);

            this.barButtonItemMatHang.ItemClick += new ItemClickEventHandler(barButtonItemMatHang_ItemClick);
            this.barButtonItemQuyDoiMatHang.ItemClick += new ItemClickEventHandler(barButtonItemQuyDoiMatHang_ItemClick);
            this.barButtonItemPhieuYeuCau.ItemClick += new ItemClickEventHandler(barButtonItemPhieuYeuCau_ItemClick);
            this.barButtonItemHoaDonBanHang.ItemClick += new ItemClickEventHandler(barButtonItemHoaDonBanHang_ItemClick);
            this.barButtonItemNhapKho.ItemClick += new ItemClickEventHandler(barButtonItemNhapKho_ItemClick);
            this.barButtonItemHoaDonBanHang_DangMo.ItemClick += new ItemClickEventHandler(barButtonItemHoaDonBanHang_DangMo_ItemClick);
            this.barButtonItemQuanLyKho.ItemClick += new ItemClickEventHandler(barButtonItemQuanLyKho_ItemClick);
            this.barButtonItemLoaiDungCu.ItemClick += new ItemClickEventHandler(barButtonItemLoaiDungCu_ItemClick);
            this.barButtonItemDungCu.ItemClick += new ItemClickEventHandler(barButtonItemDungCu_ItemClick);
            this.barButtonItemNhapDungCu.ItemClick += new ItemClickEventHandler(barButtonItemNhapDungCu_ItemClick);
            this.barButtonItemXuatDungCu.ItemClick += new ItemClickEventHandler(barButtonItemXuatDungCu_ItemClick);
            this.barButtonItemKhoTrangBiDungCu.ItemClick += new ItemClickEventHandler(barButtonItemKhoTrangBiDungCu_ItemClick);

            this.barButtonItemTongHopPhieuThuChi.ItemClick += new ItemClickEventHandler(barButtonItemTongHopPhieuThuChi_ItemClick);
            this.barButtonItemTongHopPhieuThuChi_ThuQuy.ItemClick += new ItemClickEventHandler(barButtonItemTongHopPhieuThuChi_ThuQuy_ItemClick);

            this.barButtonItemTongHopBanHang.ItemClick += new ItemClickEventHandler(barButtonItemTongHopBanHang_ItemClick);
            this.barButtonItemTongHopPhieuNhap.ItemClick += new ItemClickEventHandler(barButtonItemTongHopPhieuNhap_ItemClick);
            this.barButtonItemTongHopNhapDC.ItemClick += new ItemClickEventHandler(barButtonItemTongHopNhapDC_ItemClick);
            this.barButtonItemTongHopXuatDC.ItemClick += new ItemClickEventHandler(barButtonItemTongHopXuatDC_ItemClick);

            this.barButtonItemQuyenHan.ItemClick += new ItemClickEventHandler(barButtonItemQuyenHan_ItemClick);
            this.barButtonItemTaiKhoanTruyCap.ItemClick += new ItemClickEventHandler(barButtonItemTaiKhoanTruyCap_ItemClick);
            this.barButtonItemDoiMatKhau.ItemClick += new ItemClickEventHandler(barButtonItemDoiMatKhau_ItemClick);

            this.barButtonItemLichSuLamViec.ItemClick += new ItemClickEventHandler(barButtonItemLichSuLamViec_ItemClick);
            this.barButtonItemChuyenDoiKho.ItemClick += new ItemClickEventHandler(barButtonItemChuyenDoiKho_ItemClick);

            this.barButtonItemTaiKhoanKeToan.ItemClick += new ItemClickEventHandler(barButtonItemTaiKhoanKeToan_ItemClick);

            this.barButtonItemSoCTThanhToanVoiNguoiMua.ItemClick += new ItemClickEventHandler(barButtonItemSoCTThanhToanVoiNguoiMua_ItemClick);

            this.barButtonItemSoDuDauKy.ItemClick += new ItemClickEventHandler(barButtonItemSoDuDauKy_ItemClick);
            this.barButtonItemSoQuyTienMat.ItemClick += new ItemClickEventHandler(barButtonItemSoQuyTienMat_ItemClick);
            this.barButtonItemSoQuyTienMat_ThuQuy.ItemClick += new ItemClickEventHandler(barButtonItemSoQuyTienMat_ThuQuy_ItemClick);

            this.barButtonItemPhieuNhapOn.ItemClick += new ItemClickEventHandler(barButtonItemPhieuNhapOn_ItemClick);
            this.barButtonItemPhieuXuatKho.ItemClick += new ItemClickEventHandler(barButtonItemPhieuXuatKho_ItemClick);
            this.barButtonItemPhieuNhapKho.ItemClick += new ItemClickEventHandler(barButtonItemPhieuNhapKho_ItemClick);
            this.barButtonItemXuatNhapTon.ItemClick += new ItemClickEventHandler(barButtonItemXuatNhapTon_ItemClick);
            this.barButtonItemTraHang.ItemClick += new ItemClickEventHandler(barButtonItemTraHang_ItemClick);
            this.barButtonItemThongTin.ItemClick += new ItemClickEventHandler(barButtonItemThongTin_ItemClick);

            this.barEditItemLogout.ItemClick += new ItemClickEventHandler(barEditItemLogout_ItemClick);

            this.barButtonItemSoDuDauKy_ThuQuy.ItemClick += new ItemClickEventHandler(barButtonItemSoDuDauKy_ThuQuy_ItemClick);
            this.barButtonItemPhieuTra.ItemClick += new ItemClickEventHandler(barButtonItemPhieuTra_ItemClick);
        }

        private void FrmMain_Shown(object sender, EventArgs e)
        {
            try
            {
                Session.NgayHeThong = StaticUtil.GetDateTimeFromServer();
                SetLocalDate(Session.NgayHeThong);
            }
            catch (SqlException ex)
            {
                this.isLogin = false;
                Model.Session.CloseIndex = 0;
                ShowBgr();
                XtraMessageBox.Show("Không thể kết nối đến Cơ sở dữ liệu!\r\nVui lòng kiểm tra kết nối mạng hoặc kiểm tra lại Máy chủ\r\n\r\nChương trình sẽ đóng ngay sau thông báo này!\r\n\r\n------- Thông tin lỗi --------\r\n" + ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.Close();
                return;
            }

            try
            {
                Model.ThietDatBO thietDatBO = Model.ThietDatBO.GetRootThietDatBOByWhere("Loai=N'PhienBan'");
                int currVersion = int.MaxValue;
                if (thietDatBO != null)
                    if (thietDatBO.NoiDungF != null)
                        currVersion = (int)thietDatBO.NoiDungF.Value;

                if (currVersion > Utility.PhienBan)
                {
                    string msg = "";
                    if (currVersion == int.MaxValue)
                        msg = "Bạn đang sử dụng phiên bản cũ!\r\nHãy cập nhật phiên bản mới nhất để tiếp tục sử dụng.\r\n\r\nChương trình sẽ đóng ngay sau thông báo này!";
                    else
                        msg = "Hiện đã có phiên bản " + thietDatBO.NoiDungS + "!\r\nHãy cập nhật phiên bản mới nhất để tiếp tục sử dụng.\r\n\r\nChương trình sẽ đóng ngay sau thông báo này!";

                    this.isLogin = false;
                    Model.Session.CloseIndex = 0;
                    ShowBgr();
                    XtraMessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    this.Close();
                    return;
                }

                InitModule();
                PhanQuyen();
                CallLogin();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace, "Loi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (Model.Session.CloseIndex > 0)
            {
                e.Cancel = true;
                ShowBgr();
                XtraMessageBox.Show("Có tác vụ bạn đang thao tác nên không thể đóng chương trình!\r\n\r\nVui lòng tiến hành [Lưu] hoặc [Hủy] thao tác trước khi đóng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                HideBgr();
            }
            else
                if (this.isLogin)
                {
                    e.Cancel = true;

                    if (XtraMessageBox.Show("Bạn muốn Đăng xuất khỏi chương trình?\r\n Bạn nên chắc chắn là đã hoàn thành tất cả các thao tác (Thêm, sửa) trước khi đăng xuất!", "Đăng xuất", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        CallLogin();
                }
        }

        #region event

        void barButtonItemPhieuTra_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuTra frm = new FrmPhieuTra();
            CallForm(frm);
        }

        private void barButtonItemSoDuDauKy_ThuQuy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmSoDuDauKyTHL frm = new FrmSoDuDauKyTHL();
            CallForm(frm);
        }

        private void barEditItemLogout_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.Close();
        }

        private void barButtonItemThongTin_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmAbout frm = new FrmAbout(this);
            frm.Show();
        }

        private void barButtonItemTraHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhoTraHang frm = new FrmKhoTraHang();
            CallForm(frm);
        }

        private void barButtonItemXuatNhapTon_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmXuatNhapTon frm = new FrmXuatNhapTon();
            CallForm(frm);
        }

        private void barButtonItemPhieuNhapKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuNhapKho frm = new FrmPhieuNhapKho();
            CallForm(frm);
        }

        private void barButtonItemPhieuXuatKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuXuatKho frm = new FrmPhieuXuatKho();
            CallForm(frm);
        }

        private void barButtonItemPhieuNhapOn_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuNhapOn frm = new FrmPhieuNhapOn();
            CallForm(frm);
        }

        private void barButtonItemSoQuyTienMat_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmSoQuyTienMat frm = new FrmSoQuyTienMat();
            CallForm(frm);
        }

        private void barButtonItemSoQuyTienMat_ThuQuy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmSoQuyTienMatThuQuy frm = new FrmSoQuyTienMatThuQuy();
            CallForm(frm);
        }

        private void barButtonItemSoDuDauKy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmSoDuDauKy frm = new FrmSoDuDauKy();
            CallForm(frm);
        }

        private void barButtonItemSoCTThanhToanVoiNguoiMua_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTongHopThanhToanVoiNguoiMua frm = new FrmTongHopThanhToanVoiNguoiMua();
            CallForm(frm);
        }

        private void barButtonItemTaiKhoanKeToan_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTaiKhoanKeToan frm = new FrmTaiKhoanKeToan();
            CallForm(frm);
        }

        private void barButtonItemChuyenDoiKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhoChuyenDoi frm = new FrmKhoChuyenDoi();
            CallForm(frm);
        }

        private void barButtonItemLichSuLamViec_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmLog frm = new FrmLog();
            CallForm(frm);
        }

        private void barButtonItemTongHopXuatDC_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTHPhieuXuatDC frm = new FrmTHPhieuXuatDC();
            CallForm(frm);
        }

        private void barButtonItemTongHopNhapDC_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTHPhieuNhapDC frm = new FrmTHPhieuNhapDC();
            CallForm(frm);
        }

        private void barButtonItemTongHopPhieuNhap_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTHPhieuNhap frm = new FrmTHPhieuNhap();
            CallForm(frm);
        }

        private void barButtonItemTongHopBanHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTHHoaDonBan frm = new FrmTHHoaDonBan();
            CallForm(frm);
        }

        private void frmLogin_OnCompleted(object sender, OnCompletedEventArgs e)
        {
            if (StaticUtil.GetBool(e.objectValue))
            {
                this.barStaticItemLogin.Caption = "Tài khoản: " + Session.LoginName;
                this.isLogin = true;
                PhanQuyen();
            }
            else
            {
                LogBO logBO = LogBO.NewRootLogBO();
                logBO.TacVu = "Đăng xuất";
                logBO.ObjectID = -1;
                logBO = logBO.Save();

                this.isLogin = false;
                this.Close();
            }
        }

        private void barButtonItemDoiMatKhau_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmDoiMatKhau frm = new FrmDoiMatKhau(this);
            frm.Show();
        }

        private void barButtonItemTaiKhoanTruyCap_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTaiKhoan frm = new FrmTaiKhoan(this);
            frm.Show();
        }

        private void barButtonItemQuyenHan_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmQuyenHan frm = new FrmQuyenHan();
            CallForm(frm);
        }

        private void barButtonItemTongHopPhieuThuChi_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChiTongHop frm = new FrmThuChiTongHop();
            CallForm(frm);
        }

        private void barButtonItemTongHopPhieuThuChi_ThuQuy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChiTongHopThuQuy frm = new FrmThuChiTongHopThuQuy();
            CallForm(frm);
        }

        private void barButtonItemKhachHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhachHang frm = new FrmKhachHang();
            CallForm(frm);
        }

        private void barButtonItemNhomMatHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmNhomHang frm = new FrmNhomHang();
            CallForm(frm);
        }

        private void barButtonItemMatHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmMatHangGia frm = new FrmMatHangGia();
            CallForm(frm);
        }

        private void barButtonItemQuyDoiMatHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmMatHangQuyDoi frm = new FrmMatHangQuyDoi();
            CallForm(frm);
        }

        private void barButtonItemPhieuYeuCau_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuYeuCau frm = new FrmPhieuYeuCau();
            CallForm(frm);
        }

        private void barButtonItemHoaDonBanHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmHoaDonBan frm = new FrmHoaDonBan();
            CallForm(frm);
        }

        private void barButtonItemNhapKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuNhap frm = new FrmPhieuNhap();
            CallForm(frm);
        }

        private void barButtonItemHoaDonBanHang_DangMo_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuXuat frm = new FrmPhieuXuat();
            CallForm(frm);
        }

        private void barButtonItemQuanLyKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhoMaVach frm = new FrmKhoMaVach();
            CallForm(frm);
        }

        private void barButtonItemLoaiDungCu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmLoaiDungCu frm = new FrmLoaiDungCu();
            CallForm(frm);
        }

        private void barButtonItemDungCu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmDungCu frm = new FrmDungCu();
            CallForm(frm);
        }

        private void barButtonItemNhapDungCu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuNhapDC frm = new FrmPhieuNhapDC();
            CallForm(frm);
        }

        private void barButtonItemXuatDungCu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhieuXuatDC frm = new FrmPhieuXuatDC();
            CallForm(frm);
        }

        private void barButtonItemKhoTrangBiDungCu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhoDungCu frm = new FrmKhoDungCu();
            CallForm(frm);
        }

        private void barButtonItemChi_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChi frm = new FrmThuChi(0);
            frm.Name = "FrmChi";
            CallForm(frm);
        }

        private void barButtonItemThu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChi frm = new FrmThuChi(1);
            frm.Name = "FrmThu";
            CallForm(frm);
        }

        private void barButtonItemChi_ThuQuy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChiThuQuy frm = new FrmThuChiThuQuy(0);
            frm.Name = "FrmChiThuQuy";
            CallForm(frm);
        }

        private void barButtonItemThu_ThuQuy_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThuChiThuQuy frm = new FrmThuChiThuQuy(1);
            frm.Name = "FrmThuThuQuy";
            CallForm(frm);
        }

        private void barButtonItemBangLuong_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmBangLuong frm = new FrmBangLuong();
            CallForm(frm);
        }

        private void barButtonItemThietDatHeThong_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmThietDat frm = new FrmThietDat(this);
            frm.Show();
        }

        private void barButtonItemTamUngLuong_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmTamUngLuong frm = new FrmTamUngLuong();
            CallForm(frm);
        }

        private void barButtonItemKhoanTru_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmKhoanTru frm = new FrmKhoanTru();
            CallForm(frm);
        }

        private void barButtonItemPhuCap_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhuCap frm = new FrmPhuCap();
            CallForm(frm);
        }

        private void barButtonItemNgachBacLuong_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmNgachBacLuong frm = new FrmNgachBacLuong();
            CallForm(frm);
        }

        private void barButtonItemHoSoNhanVien_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmNhanVien frm = new FrmNhanVien(this);
            frm.Show();
        }

        private void barButtonItemDanhMuc_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmDanhMuc frm = new FrmDanhMuc();
            CallForm(frm);
        }

        private void barButtonItemPhongBan_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmPhongBan frm = new FrmPhongBan();
            CallForm(frm);
        }

        private void barButtonItemChucVu_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmChucVu frm = new FrmChucVu();
            CallForm(frm);
        }
        #endregion event

        #region function
        private void CheckData()
        {
            string GetAllDBConnectionStr = "Data Source=(local)\\SQLEXPRESS;Initial Catalog=master;Trusted_Connection=true;";
            bool hasData = false;

            clDB db = new clDB();
            if (db.CheckBBExist("THL") == false)
            {
                string dbfile = Application.StartupPath;
                if (dbfile.EndsWith("\\"))
                    dbfile += "\\";
                dbfile += "THL.mdf";

                try
                {
                    db.AttactDB(dbfile, "THL");
                }
                catch { }
            }

            if (db.CheckBBExist("THL") == false)
            {
                XtraMessageBox.Show("Khởi tạo Database thất bại. Vui lòng liên hệ với chúng tôi để được trợ giúp");
                Application.Exit();
            }
        }

        private void CallLogin()
        {
            this.barStaticItemLogin.Caption = "";
            this.isLogin = false;

            while (this.xtraTabbedMdiManager1.Pages.Count > 0)
                this.xtraTabbedMdiManager1.Pages[0].MdiChild.Close();

            FrmLogin frmLogin = new FrmLogin(this);
            frmLogin.OnCompleted += new OnCompletedEventHandler(frmLogin_OnCompleted);
            frmLogin.Show();
        }

        private void PhanQuyen()
        {
            Model.Session.thietDatBOCollection = Model.ThietDatBOCollection.GetThietDatBOCollection();

            int i = 0;
            int length = 0;

            Session.ThuChi_GiamDocID = StaticUtil.GetRealInt(Model.Session.thietDatBOCollection.GetStrValue(LoaiThietDat.GiamDoc), null);
            Session.ThuChi_KeToanID = StaticUtil.GetRealInt(Model.Session.thietDatBOCollection.GetStrValue(LoaiThietDat.KeToan), null);
            Session.ThuChi_ThuQuyID = StaticUtil.GetRealInt(Model.Session.thietDatBOCollection.GetStrValue(LoaiThietDat.ThuQuy), null);
            Session.ThuChi_ThuKhoID = StaticUtil.GetRealInt(Model.Session.thietDatBOCollection.GetStrValue(LoaiThietDat.ThuKho), null);

            DateTime dt = DateTime.Now.AddMonths(-3);
            using (SqlConnection cnn = new SqlConnection(Model.Session.DBConnectionString))
            {
                cnn.Open();
                using (SqlCommand cmd = new SqlCommand("", cnn))
                {
                    cmd.CommandText = "DELETE FROM Log WHERE DATC<=CONVERT(datetime,'" + dt.ToString("yyyy-MM-dd 00:00:00") + "',120)";
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                }
                cnn.Close();
                cnn.Dispose();
            }

            int j = 0;
            int k = 0;
            BarItem btn = null;
            ModuleItem item = null;

            if (Session.LoginID >= 0)
            {
                NhanVienDangNhapBO nhanVienBO = NhanVienDangNhapBO.GetRootNhanVienDangNhapBO(Session.LoginID);
                PhanQuyenBOCollection phanQuyenBOCollection = PhanQuyenBOCollection.GetPhanQuyenBOCollection("QuyenHanID=" + nhanVienBO.LoaiTaiKhoanID.Value.ToString() + " AND ModuleID>=10000", "ModuleID").lstData[0];

                this.barStaticItemLogin.Caption = "Người đang đăng nhập: " + StaticUtil.UpperFirstCharacter(nhanVienBO.Ho) + " " + StaticUtil.UpperFirstCharacter(nhanVienBO.Ten);

                length = phanQuyenBOCollection.Count;

                PhanQuyenBO phanQuyenBO = null;
                for (i = 0; i < length; i++)
                {
                    phanQuyenBO = phanQuyenBOCollection[i];
                    item = StaticUtil.GetModuleItem(phanQuyenBO.ModuleID.Value);
                    btn = this.ribbonControl1.Items[item.Item];
                    if (btn != null)
                        btn.Visibility = (phanQuyenBO.TruyCap.Value ? BarItemVisibility.Always : BarItemVisibility.Never);
                }
            }
            else
            {
                length = this.ribbonControl1.Items.Count;
                for (i = 0; i < length; i++)
                    this.ribbonControl1.Items[i].Visibility = BarItemVisibility.Always;
            }

            //group
            length = this.ribbonControl1.Pages.Count;
            int lengthGroup = 0;
            int lengthItem = 0;
            int count = 0;
            int countGroup = 0;

            RibbonPage page = null;
            RibbonPageGroup group = null;
            for (i = 0; i < length; i++)
            {
                page = this.ribbonControl1.Pages[i];

                countGroup = 0;
                lengthGroup = page.Groups.Count;
                for (j = 0; j < lengthGroup; j++)
                {
                    group = page.Groups[j];

                    count = 0;
                    lengthItem = group.ItemLinks.Count;
                    for (k = 0; k < lengthItem; k++)
                        if (group.ItemLinks[k].Item.Visibility == BarItemVisibility.Never)
                            count++;

                    group.Visible = (count != lengthItem);
                    if (group.Visible == false)
                        countGroup++;
                }

                page.Visible = (countGroup != lengthGroup);
            }
        }

        private void InitModule()
        {
            Session.lstModuleItem.Clear();

            Session.lstModuleItem.Add(new ModuleItem(10, "ribbonPageHeThong", "Hệ thống"));
            Session.lstModuleItem.Add(new ModuleItem(10100, "ribbonPageGroupHeThong", "Thiết đặt"));
            Session.lstModuleItem.Add(new ModuleItem(10100100, "barButtonItemThietDatHeThong", "Thiết đặt hệ thống"));
            Session.lstModuleItem.Add(new ModuleItem(10100200, "barButtonItemLichSuLamViec", "Lịch sử làm việc"));

            Session.lstModuleItem.Add(new ModuleItem(10200, "ribbonPageGroupTaiKhoan", "Tài khoản"));
            Session.lstModuleItem.Add(new ModuleItem(10200100, "barButtonItemQuyenHan", "Quyền hạn"));
            Session.lstModuleItem.Add(new ModuleItem(10200200, "barButtonItemTaiKhoanTruyCap", "Tài khoản truy cập"));

            Session.lstModuleItem.Add(new ModuleItem(10300, "ribbonPageGroupDuLieu", "Dữ liệu"));
            Session.lstModuleItem.Add(new ModuleItem(10300100, "barButtonItemSaoLuuDuLieu", "Sao lưu dữ liệu"));
            Session.lstModuleItem.Add(new ModuleItem(10300200, "barButtonItemPhucHoiDuLieu", "Phục hồi dữ liệu"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(20, "ribbonPageNhanSuTienLuong", "Nhân sự, tiền lương"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(20100, "ribbonPageGroupDanhMuc_NSTL", "Danh mục"));
            Session.lstModuleItem.Add(new ModuleItem(20100100, "barButtonItemDanhMuc", "Danh mục chung"));
            Session.lstModuleItem.Add(new ModuleItem(20100200, "barButtonItemPhongBan", "Phòng ban"));
            Session.lstModuleItem.Add(new ModuleItem(20100300, "barButtonItemChucVu", "Chức vụ"));
            Session.lstModuleItem.Add(new ModuleItem(20100400, "barButtonItemNgachBacLuong", "Ngạch, bậc"));
            Session.lstModuleItem.Add(new ModuleItem(20100500, "barButtonItemPhuCap", "Phụ cấp"));
            Session.lstModuleItem.Add(new ModuleItem(20100600, "barButtonItemKhoanTru", "Khoản trừ"));

            Session.lstModuleItem.Add(new ModuleItem(20200, "ribbonPageGroupNhanVien", "Nhân viên"));
            Session.lstModuleItem.Add(new ModuleItem(20200100, "barButtonItemHoSoNhanVien", "Hồ sơ nhân viên"));

            Session.lstModuleItem.Add(new ModuleItem(20300, "ribbonPageGroupTienLuong", "Tiền lương"));
            Session.lstModuleItem.Add(new ModuleItem(20300100, "barButtonItemTamUngLuong", "Tạm ứng lương"));
            Session.lstModuleItem.Add(new ModuleItem(20300200, "barButtonItemBangLuong", "Bảng lương"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(30, "ribbonPageBanHangKho", "Bán, nhập hàng"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(30100, "ribbonPageGroupDanhMuc_BHK", "Danh mục"));
            Session.lstModuleItem.Add(new ModuleItem(30100100, "barButtonItemKhachHang", "Khách hàng, Nhà cung cấp"));

            Session.lstModuleItem.Add(new ModuleItem(30200, "ribbonPageGroupBanHang", "Bán hàng và nhập hàng"));
            Session.lstModuleItem.Add(new ModuleItem(30200100, "barButtonItemPhieuYeuCau", "Phiếu yêu cầu"));
            Session.lstModuleItem.Add(new ModuleItem(30200200, "barButtonItemHoaDonBanHang", "Hóa đơn bán hàng"));
            Session.lstModuleItem.Add(new ModuleItem(30200300, "barButtonItemHoaDonBanHang_DangMo", "Hóa đơn BH đang mở"));
            Session.lstModuleItem.Add(new ModuleItem(30200400, "barButtonItemNhapKho", "Phiếu nhập hàng"));
            Session.lstModuleItem.Add(new ModuleItem(30200500, "barButtonItemPhieuNhapOn", "Phiếu nhập đang mở"));
            Session.lstModuleItem.Add(new ModuleItem(30200600, "barButtonItemPhieuTra", "Phiếu trả hàng"));

            Session.lstModuleItem.Add(new ModuleItem(30300, "ribbonPageGroupTongHop", "Tổng hợp"));
            Session.lstModuleItem.Add(new ModuleItem(30300100, "barButtonItemTongHopBanHang", "Hóa đơn bán hàng"));
            Session.lstModuleItem.Add(new ModuleItem(30300200, "barButtonItemTongHopPhieuNhap", "Phiếu nhập hàng"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(40, "ribbonPageKho", "Kho"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(40100, "ribbonPageGroupDanhMucKho", "Danh mục"));
            Session.lstModuleItem.Add(new ModuleItem(40100100, "barButtonItemNhomMatHang", "Nhóm mặt hàng"));
            Session.lstModuleItem.Add(new ModuleItem(40100200, "barButtonItemMatHang", "Mặt hàng"));
            Session.lstModuleItem.Add(new ModuleItem(40100300, "barButtonItemQuyDoiMatHang", "Quy đổi mặt hàng"));

            Session.lstModuleItem.Add(new ModuleItem(40200, "ribbonPageGroupKho", "Kho"));
            Session.lstModuleItem.Add(new ModuleItem(40200100, "barButtonItemQuanLyKho", "Quản lý kho"));
            Session.lstModuleItem.Add(new ModuleItem(40200200, "barButtonItemPhieuNhapKho", "Nhập kho"));
            Session.lstModuleItem.Add(new ModuleItem(40200300, "barButtonItemPhieuXuatKho", "Xuất kho"));

            Session.lstModuleItem.Add(new ModuleItem(40300, "ribbonPageGroupTongHopKho", "Tổng hợp"));
            Session.lstModuleItem.Add(new ModuleItem(40300100, "barButtonItemXuatNhapTon", "TH xuất, nhập, tồn"));
            Session.lstModuleItem.Add(new ModuleItem(40300200, "barButtonItemChuyenDoiKho", "Chuyển đổi kho hàng"));
            Session.lstModuleItem.Add(new ModuleItem(40300300, "barButtonItemTraHang", "Trả hàng"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(50, "ribbonPageTrangBiDungCu", "Trang bị, dụng cụ"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(50100, "ribbonPageGroupDanhMuc_TBDC", "Danh mục"));
            Session.lstModuleItem.Add(new ModuleItem(50100100, "barButtonItemLoaiDungCu", "Loại dụng cụ, trang thiết bị, phương tiện"));
            Session.lstModuleItem.Add(new ModuleItem(50100200, "barButtonItemDungCu", "Dụng cụ, trang thiết bị, phương tiện"));

            Session.lstModuleItem.Add(new ModuleItem(50200, "ribbonPageGroupTrangBiDungCu", "Trang bị, dụng cụ"));
            Session.lstModuleItem.Add(new ModuleItem(50200100, "barButtonItemKhoTrangBiDungCu", "Quản lý kho"));
            Session.lstModuleItem.Add(new ModuleItem(50200200, "barButtonItemNhapDungCu", "Nhập kho"));
            Session.lstModuleItem.Add(new ModuleItem(50200300, "barButtonItemXuatDungCu", "Xuất kho"));

            Session.lstModuleItem.Add(new ModuleItem(50300, "ribbonPageGroupTongHopDungCu", "Tổng hợp"));
            Session.lstModuleItem.Add(new ModuleItem(50300100, "barButtonItemTongHopNhapDC", "Tổng hợp Nhập kho"));
            Session.lstModuleItem.Add(new ModuleItem(50300200, "barButtonItemTongHopXuatDC", "Tổng hợp Xuất kho"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(60, "ribbonPageThuChi", "Quản lý thu chi"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(60100, "ribbonPageGroupDanhMuc_ThuChi", "Kế toán"));
            Session.lstModuleItem.Add(new ModuleItem(60100100, "barButtonItemTaiKhoanKeToan", "Tài khoản kế toán"));
            Session.lstModuleItem.Add(new ModuleItem(60100200, "barButtonItemSoDuDauKy", "Số dư đầu kỳ của Khách và NCC"));

            Session.lstModuleItem.Add(new ModuleItem(60200, "ribbonPageGroupThuChi", "Thu chi"));
            Session.lstModuleItem.Add(new ModuleItem(60200100, "barButtonItemThu", "Phiếu thu"));
            Session.lstModuleItem.Add(new ModuleItem(60200200, "barButtonItemChi", "Phiếu chi"));

            Session.lstModuleItem.Add(new ModuleItem(60300, "ribbonPageGroupTongHopThuChi", "Tổng hợp"));
            Session.lstModuleItem.Add(new ModuleItem(60300100, "barButtonItemTongHopPhieuThuChi", "Tổng hợp thu, chi"));
            Session.lstModuleItem.Add(new ModuleItem(60300200, "barButtonItemSoCTThanhToanVoiNguoiMua", "Sổ chi tiết TT với người mua"));
            Session.lstModuleItem.Add(new ModuleItem(60300300, "barButtonItemSoQuyTienMat", "Sổ quỹ"));

            //======================
            Session.lstModuleItem.Add(new ModuleItem(70, "ribbonPageThuQuy", "Quỹ nội bộ"));
            //---
            Session.lstModuleItem.Add(new ModuleItem(70100, "ribbonPageGroupThuChi_ThuQuy", "Thu chi"));
            Session.lstModuleItem.Add(new ModuleItem(70200100, "barButtonItemSoDuDauKy_ThuQuy", "Số dư đầu kỳ"));
            Session.lstModuleItem.Add(new ModuleItem(70200200, "barButtonItemThu_ThuQuy", "Phiếu thu"));
            Session.lstModuleItem.Add(new ModuleItem(70200300, "barButtonItemChi_ThuQuy", "Phiếu chi"));

            Session.lstModuleItem.Add(new ModuleItem(70300, "ribbonPageGroupTongHopThuChi_ThuQuy", "Tổng hợp"));
            Session.lstModuleItem.Add(new ModuleItem(70300100, "barButtonItemTongHopPhieuThuChi_ThuQuy", "Tổng hợp thu, chi"));
            Session.lstModuleItem.Add(new ModuleItem(70300200, "barButtonItemSoQuyTienMat_ThuQuy", "Sổ quỹ tiền mặt"));
        }

        public void ShowBgr()
        {
            this.transpControl.Location = new Point(0, 0);
            this.transpControl.Size = new Size(this.Width, this.Height);
            this.transpControl.Visible = true;
            this.transpControl.BringToFront();
            this.Update();
        }

        public void HideBgr()
        {
            this.transpControl.Visible = false;
        }

        public void CallForm(Form frm)
        {
            foreach (XtraMdiTabPage xtraMdiTabPage in this.xtraTabbedMdiManager1.Pages)
            {
                if (xtraMdiTabPage.MdiChild.Name == frm.Name)
                {
                    this.xtraTabbedMdiManager1.SelectedPage = xtraMdiTabPage;
                    return;
                }
            }
            frm.MdiParent = this;
            frm.Show();
        }

        public void CallForm(Form frm, string title)
        {
            foreach (XtraMdiTabPage xtraMdiTabPage in this.xtraTabbedMdiManager1.Pages)
            {
                if (xtraMdiTabPage.MdiChild.Text == title)
                {
                    this.xtraTabbedMdiManager1.SelectedPage = xtraMdiTabPage;
                    return;
                }
            }
            frm.MdiParent = this;
            frm.Show();
        }

        #region set local date
        [System.Runtime.InteropServices.DllImport("kernel32 ", SetLastError = true)]
        private static extern bool SetSystemTime(ref SYSTEMTIME systemTime);
        struct SYSTEMTIME
        {
            internal short wYear;
            internal short wMonth;
            internal short wDayOfWeek;
            internal short wDay;
            internal short wHour;
            internal short wMinute;
            internal short wSecond;
            internal short wMilliseconds;
        }

        private void SetLocalDate(DateTime dt)
        {
            //SYSTEMTIME st = new SYSTEMTIME();
            //dt = dt.AddHours(-7);
            //st.wYear = (short)dt.Year;
            //st.wMonth = (short)dt.Month;
            //st.wDay = (short)dt.Day;
            //st.wHour = (short)dt.Hour;
            //st.wMinute = (short)dt.Minute;
            //st.wSecond = (short)dt.Second;
            //st.wMilliseconds = (short)dt.Millisecond;

            //SetSystemTime(ref st);
        }
        #endregion set local date
        #endregion function
    }
}